////由于非实际环境无wiringPi，先全部注释防止报错
//#include "hardwaremanager.h"
//typedef int QueueDataType;

//HardwareManager::HardwareManager() {
//    // 初始化硬件管理类
//}

//HardwareManager::~HardwareManager() {
//    // 销毁硬件管理类
//}

//int HardwareManager::Steer(int angle) {
//    int fd;
//    if ((fd = serialOpen("/dev/ttyAMA0", 38400)) < 0) {
//        printf("serial err\n");
//    }
//    Queue list;
//    QueueInit(&list);
//    QueuePush(&list, 0xff);
//    QueuePush(&list, 0xff);
//    QueuePush(&list, 0x01);
//    QueuePush(&list, 0x05);
//    QueuePush(&list, 0x03);
//    QueuePush(&list, 0x2a);
//    int num;
//    num = MapAngle(angle);
//    int hex1, hex2;
//    hex1 = num / 256;
//    hex2 = num % 256;
//    QueuePush(&list, hex1);
//    QueuePush(&list, hex2);
//    QueuePush(&list, CheckSum(hex1, hex2));
//    printf("角度等于%d\n", num);
//    int length = QueueSize(&list);
//    printf("数组长度%d\n", length);
//    for (int i = 0; i < length; i++) {
//        printf("第%d个数字是0x%02x\n", i, QueueFront(&list));
//        serialPutchar(fd, QueueFront(&list));
//        QueuePop(&list);
//    }
//    return 0;
//}

//char* HardwareManager::ScanQRCode() {
//    int serial_port;
//    if (wiringPiSetup() == -1) {
//        printf("无法初始化wiringPi库\n");
//        return NULL;
//    }

//    serial_port = serialOpen("/dev/ttyAMA0", 9600);
//    if (serial_port == -1) {
//        printf("无法打开串口设备\n");
//        return NULL;
//    }

//    Queue qrCodes;
//    QueueInit(&qrCodes);

//    while (1) {
//        if (serialDataAvail(serial_port)) {
//            int receivedData = serialGetchar(serial_port);

//            if (receivedData == 0x0D) {
//                if (!QueueEmpty(&qrCodes)) {
//                    int qrCodeSize = QueueSize(&qrCodes);
//                    char* qrCodeData = (char*)malloc((qrCodeSize + 1) * sizeof(char));
//                    qrCodeData[qrCodeSize] = '\0';

//                    for (int i = 0; i < qrCodeSize; i++) {
//                        qrCodeData[i] = QueueFront(&qrCodes);
//                        QueuePop(&qrCodes);
//                    }

//                    QueueDestory(&qrCodes);

//                    return qrCodeData;
//                }
//            }
//            else {
//                QueuePush(&qrCodes, receivedData);
//            }
//        }
//    }
//}

//void HardwareManager::QueueInit(Queue* pq) {
//    assert(pq);
//    pq->head = pq->tail = NULL;
//}

//void HardwareManager::QueueDestory(Queue* pq) {
//    assert(pq);
//    QueueNode* cur = pq->head;
//    while (cur) {
//        QueueNode* del = cur;
//        cur = cur->next;
//        free(del);
//        del = NULL;
//    }
//    pq->head = pq->tail = NULL;
//}

//bool HardwareManager::QueueEmpty(Queue* pq) {
//    return pq->head == NULL;
//}

//void HardwareManager::QueuePush(Queue* pq, QueueDataType x) {
//    assert(pq);
//    QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));
//    if (newnode == NULL) {
//        perror("malloc fail!!!");
//        exit(-1);
//    } else {
//        newnode->data = x;
//        newnode->next = NULL;
//    }
//    if (pq->head == NULL && pq->tail == NULL) {
//        pq->head = pq->tail = newnode;
//    } else {
//        pq->tail->next = newnode;
//        pq->tail = pq->tail->next;
//    }
//}

//void HardwareManager::QueuePop(Queue* pq) {
//    assert(pq);
//    assert(!QueueEmpty(pq));
//    if (pq->head->next == NULL) {
//        free(pq->head);
//        pq->head = pq->tail = NULL;
//    } else {
//        QueueNode* del = pq->head;
//        pq->head = pq->head->next;
//        free(del);
//        del = NULL;
//    }
//}

//QueueDataType HardwareManager::QueueFront(Queue* pq) {
//    assert(pq);
//    assert(!QueueEmpty(pq));
//    return pq->head->data;
//}

//QueueDataType HardwareManager::QueueBack(Queue* pq) {
//    assert(pq);
//    assert(!QueueEmpty(pq));
//    return pq->tail->data;
//}

//int HardwareManager::QueueSize(Queue* pq) {
//    assert(pq);
//    assert(!QueueEmpty(pq));
//    int n = 0;
//    QueueNode* cur = pq->head;
//    while (cur) {
//        ++n;
//        cur = cur->next;
//    }
//    return n;
//}

//int HardwareManager::MapAngle(int angle) {
//    if (angle < 0) {
//        angle += 360;
//    }
//    angle %= 360;
//    int result;
//    result = angle * 4095 / 360;
//    return result;
//}

//int HardwareManager::CheckSum(int hex1, int hex2) {
//    int sum;
//    sum = 51 + hex1 + hex2;
//    sum = ~sum;
//    return sum & 0xFF;
//}

